﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using DataAccessComponents;
using System.Collections.ObjectModel;

namespace BusinessLogicLayer 
{
    public class KrajBL : IBusinessLogicLayer<Kraj>
    {
        private DbOperations dal = new DbOperations();

        /// <summary>
        /// Funkcja dodawająca kraj do bazy danych
        /// </summary>
        /// <param name="objDodaj">Obiekt Kraj</param>
        /// <returns></returns>
        public int dodaj(Kraj objDodaj)
        {
            GaleriaBL galeriaBL = new GaleriaBL();
            int idGaleria = galeriaBL.dodaj(objDodaj.Galeria);
            objDodaj.Id_galeria = idGaleria;
            return dal.dodajKraj(objDodaj);
        }

        /// <summary>
        /// Funkcja usuwająca kraj z bazy danych
        /// </summary>
        /// <param name="idusun">Id kraju do usunięcia</param>
        public void usun(int idusun)
        {
            Kraj kraj = this.pobierz(idusun);

            // Usuwanie kraju
            dal.usunKraj(idusun);
            // Usuwanie galerii powiązanej z krajem oraz zdjec znajdujących się galerii
            Galeria_ZdjeciaBL gzBL = new Galeria_ZdjeciaBL();
            gzBL.usun(kraj.Id_galeria);

            GaleriaBL galeriaBL = new GaleriaBL();
            galeriaBL.usun(kraj.Id_galeria);         
            
        }

        /// <summary>
        /// Funkcja akutualizująca kraj w bazie danych
        /// </summary>
        /// <param name="objAktualizuj">Obiekt kraj zawierający inforamacje do aktualizacji</param>
        public void aktualizuj(Kraj objAktualizuj)
        {
            dal.aktualizujKraj(objAktualizuj);
            //Aktulizowanie informacji o galerii
            GaleriaBL galeriaBL = new GaleriaBL();
            galeriaBL.aktualizuj(objAktualizuj.Galeria);
        }

        /// <summary>
        /// Pobiera kraj na podstawie id kraj
        /// </summary>
        /// <param name="idpobierz">Id kraj</param>
        /// <returns>Obiekt Kraj</returns>
        public Kraj pobierz(int idpobierz)
        {
            Kraj kraj = dal.pobierzKraj(idpobierz);

            //pobranie inforamcji o galerii hotelu
            GaleriaBL galeriaBL = new GaleriaBL();
            kraj.Galeria = galeriaBL.pobierz(kraj.Id_galeria);

            //pobieranie zdjecie głowne
            ZdjecieBL zdjecieBL = new ZdjecieBL();
            kraj.IdzdjecieGlowne = galeriaBL.pobierzZdjecieGlowneGaleria(kraj.Id_galeria).Id_zdjecia;

            return kraj;
        }

        /// <summary>
        /// Funkcja zwracjająca listę krajów
        /// </summary>
        /// <returns></returns>
        public ObservableCollection<Kraj> pobierzListe()
        {
            ObservableCollection<Kraj> tmp = dal.pobierzListeKraj();            
            GaleriaBL galeriaBL = new GaleriaBL();
            
            foreach (Kraj kraj in tmp)
            {               
                //pobranie inforamcji o galerii miasta                
                kraj.Galeria = galeriaBL.pobierz(kraj.Id_galeria);
                //pobieranie zdjecie głowne                
                kraj.IdzdjecieGlowne = galeriaBL.pobierzZdjecieGlowneGaleria(kraj.Id_galeria).Id_zdjecia;
            }
            return tmp;
        }

        /// <summary>
        /// Funkcja aktualizująca kraje, jezeli kraj posiada id_kraj == 0 to znaczy ze jest to nowy kraj i należy go dodać
        /// </summary>
        /// <param name="lista"></param>
        public bool aktualizujListe(ObservableCollection<Kraj> lista)
        {
            foreach (Kraj kraj in lista)
            {
                if (kraj.Id_kraju == 0)
                {
                    this.dodaj(kraj);
                }
                else
                    this.aktualizuj(kraj);
            }
            return true;
        }

        /// <summary>
        /// Funkcja usuwa kraje
        /// </summary>
        /// <param name="lista"></param>
        /// <returns></returns>
        public bool usun(ObservableCollection<Kraj> lista)
        {
            foreach (Kraj kraj in lista)
            {
                this.usun(kraj.Id_kraju);
            }
            return true;
        }
    }
    
}
